صفحه ها
دسته
وبلاگ من در بلاگفا
عکس من
وبلاگهاي دوستان
ورودي هاي پنجره اميد
معرفي وب سايت هاي پرطرفدار
سايتهاي دوستان
لينك هاي دسترسي سريع
مطالب من در ثبت مطالب روزانه
آرشیو
آمار وبلاگ
تعداد بازدید : 552862
تعداد نوشته ها : 1492
تعداد نظرات : 394
Rss
طراح قالب
مهدي يوسفي
صبر کردن دردناک است ، و فراموش کردن دردناکتر ، ولی از این دو دردناک تر این است که ندانی باید صبر کنی یا فراموش

Patience is painful, & forgetting is more painful, but the most painful it is that you don't know you should forget or wait.
دسته ها : عاشقانه
جمعه بیست و هفتم 10 1387

تا حالا شده ویندوزتونو پاک کنید و ویندوز جدید نصب کنید ولی نام ویندوز قبلی هنوز در لیست انتخاب سیستم عامل باشه؟

برای حذف اون  روی    My computer  راست کلیک کنید و properties رو بزنید.سپس وارد قسمت advance بشید.در بخش startup and Recovery  روی setting کلیک کنید در این قسمت کنار

 display list of operating system time to رو برداریدو ok کید حالا دیگه در ابتدای بوت شدن کامپیوتر لیست سیستم علمل ها نشان داده نمیشود .

ولی اگه 2تا سیستم عامل دارید و لیستتون 3تا سیستم عامل رو نشون میده که یکیش همونیه که پاک شده مراحل بالا رو انجام ندید بلکه در قسمت  startup and Recovery با استفاده از گزینه ی edit میتونید لیست سیستم عامل ها رو ویرایش کنید.

 ولی قبل از تغییر دادن اون پیشناهاد میکنم اول ازش یه پشتیبان داشته باشید.از File گزینه ی save as رو بزنید و یه جایی ذخیرش کنید.

دسته ها : علوم و فن آوری
جمعه بیست و هفتم 10 1387

سریعتر کردن زمان Shutdown در Windows XP

وارد ریجستری شده و شاخه زیر را دنبال کنید:

HKEY_CURRENT_USER\Control Panel\Desktop

سمت راست پنجره , راست کلیک کنید و پس از انتخاب New روی Strring Value کلیک کنید .

 نام آن را به WaitToKillAppTimeout تغییر دهید . وارد آن شده و زمان آن را به 500

تغییر دهید . توجه داشته باشید این عدد از 500 کمتر نباشد زیرا در ویندوز اشکال

ایجاد می شود .  حال کامپیوتر را ریستارت کنید .

دسته ها : علوم و فن آوری
جمعه بیست و هفتم 10 1387
اطلاع از آخرین تماسها حتی در صورت حذف Call Log در گوشیهای سونی اریکسون
 

حتماً برایتان اتفاق افتاده است که فردی گوشی شما را برای برقراری یک تماس قرض بگیرد و پس از اتمام تماس ، شماره ای که با آن تماس گرفته است را از بخش Call Log گوشی پاک می کند تا شما ندانید با چه شماره ای تماس گرفته است و یا چه شماره ای به گوشی شما زنگ زده بوده است .

یا شاید در جستجوی شماره ای هستید که قبلا با آن تماس گرفته اید و در دفترچه تلفن خود ندارید و از شانس بد شما بخش Call Log که نیز که شماره هایی که با آن ارتباط برقرار کرده اید را نگهداری می کند ، پاک کرده اید …
و یا شاید قصد خرید یک گوشی را دارید که فروشنده آن ادعا می کند گوشی کاملاً آکبند و نو بوده و تاکنون از آن استفاده نشده است و شما قصد دارید واقعا از این موضوع مطمئن شوید که آیا واقعاً تماسی با گوشی برقرار نشده است ….
در چنین مواردی چه می کنید ؟



شایان ذکر است این ترفند تنها مخصوص گوشیهای سونی اریکسون با پلتفرم جاوا می باشد .
برای این کار مراحل زیر را دنبال کنید .
1- وارد بخش Contact (دفترچه تلفن) شوید .
2- گزینه New contact را انتخاب کنید .
3- سپس گزینه New number را انتخاب کنید.
4- گزینه Look up را انتخاب کنید .
5- سپس گزینه More را بزنید .
6- گزینه Unsaved nos را انتخاب کنید

اگر زبان تلفن همراه شما فارسی است ، گزینه ها به ترتیب از چپ به راست از این قرار خواهند بود:
مخاطبین » افزودن » شماره جدید » افزودن » جستجو » بیشتر » شماره ذخیره نشده
خوب چه می بینید ؟
بله آخرین شماره هایی که توسط گوشی شما با آنها ارتباط برقرار شده است ! (تماس گرفته شده و پاسخ داده شده ) را مشاهده خواهید کرد . این لیست قابل حذف نیست و همواره تا 99 شماره آخر را نمایش می دهد

دسته ها : علوم و فن آوری
جمعه بیست و هفتم 10 1387
قطعأ شما نیز گاهی خیلی دوست داشته اید که برای مدتی در دسترس نباشید و فردی با شما تماس نگیرد یا پیامی دریافت نکنید. راه هایی نیز برای اینکار وجود دارد. میتوانید گوشی خود را خیلی راحت خاموش کنید ، شاید این کار ساده ترین راه باشد اما بهترین راه نیست ، چرا که با اینکار دیگر به امکانات جانبی گوشی دسترسی نخواهید داشت و شاید نوعی بی احترامی به دوستانتان تلقی شود. یا میتوانید با استفاده از ترفندی که قبلأ در کمیاب آنلاین مطرح شده و با بهره گیری از قابلیت دایورت گوشی خود را از دسترس خارج کنید که این راه نیز باعث میشود که همه متوجه شوند که خودتان باعث عدم دریافت تماس ها شده اید. و راه های دیگری نظیر استفاده از نرم افزارهای جانبی که دردسرهای خود را دارد. اما اکنون شما میتوانید با استفاده از این ترفند و تنها با تغییر یک تنظیم در گوشی خود کاملأ از شبکه تلفن همراه خارج شوید به طوریکه هر فردی با شما تماس گیرد با پیغام "در حال حاضر تماس با مشترک مورد نظر مقدور نمی باشد" روبرو گردد و علاوه بر آن هیچ پیامی برای شما ارسال نشود. این روش بر روی کلیه خطوط تلفن همراه کشور امکان پذیر است و این بار شما بر خلاف شعار همراه اول ، تنها هستید!

ابتدا دقت کنید این روش تقریبأ بر روی کلیه گوشی ها امکان پذیر است و تنها بر روی برخی مدل های قدیمی امکان استفاده از آن وجود ندارد.

در گوشی های نوکیا:
از منوی اصلی وارد Settings شوید.
سپس به قسمت Network بروید.
اکنون وارد بخش Network Mode شوید.
حالا گزینه UMTS را انتخاب نمایید.
گوشی شما ممکن است رستارت شود. کار تمام است.
بعد از این کار ، عبارتی با عنوان 3G در کنار نشانگر آنتن گوشی فعال میشود.
اکنون (ترفندستان) میتوانید با شماره گیری گوشی خود توسط تلفن دیگری مطمئن شوید که در دسترس نیستید.
برای بازگشت به حالت معمولی ، مجدد به مسیر فوق رفته و گزینه Dual Mode را انتخاب نمایید.

در گوشی های سونی اریکسون:
از منوی اصلی وارد Settings شوید.
سپس به قسمت Connectivity بروید.
اکنون وارد بخش Mobile Networks شوید.
حالا به قسمت GSM/3G networks بروید.
اکنون بایستی گزینه 3G Only را انتخاب نمایید.
کار تمام است. با شماره گیری گوشی خود توسط تلفن دیگری نتیجه را ببینید.
برای بازگردانی گوشی به حالت اولیه ، کافی است از مسیر یاد شده گزینه GSM and 3G را انتخاب کنید.

در برخی از گوشی های سونی اریکسون مسیر انجام این کار به این شکل است:
Menu > Tools > Control Panel > Connections > Mobile networks > GSM/3G networks

در سایر گوشی ها نیز روش انجام کار تقریبأ به همین شکل است. شما باید در قسمت تنظیمات گوشی خود و در بخش Network آن ، حالت شبکه را بر روی GSM یا UMTS تنظیم کنید. با آزمون و خطا نیز این کار میسر است.

لازم به ذکر است این روش بر روی خطوط مخابراتی داخل کشور یعنی همراه اول ، تالیا و ایرانسل امکان پذیر است چرا که در حال حاضر هیچ کدام از این اپراتورها از فناوری 3G پشتیبانی نمی کنند.

به نقل از ترفندستان

دسته ها : علوم و فن آوری
جمعه بیست و هفتم 10 1387
نخستین سه امتیاز سال جدید با تک گل زیبای کاپیتان به دست امد. برای تثبیت جایگاه دوم و کاستن فاصله با اینتر یک ضربه ایستگاهی زیبا و دقیق از پینتوریکیو کافی بود تا یوونتوس در دیدار نخست سال جدید با سه امتیاز ارزشمند زمین را ترک کند. بانوی پیر که همچون دیدارهای سال 2008 با مشکل مصدومیت بدون مهره های کلیدی از جمله بوفون و کامورانزی در زمین حاضر شده بود با ارائه یک بازی منظم توانست پیروز دیدار شود تا برتری را به تیفوسی های خود هدیه دهد.
سیاه و سفیدپوشان که از نتیجه دیدار شب گذشته اینتر مطلع بودند می دانستند که با کسب یک پیروزی فاصله خود را کمتر خواهند کرد. سیه نا که اخرین دیدار سال 2008 را با گل افساید مایکن به پایان رسانده بود این بار با انگیزه ای فراوان در ورزشگاه المپیکو حاضر شد و در دقایق نخست نمایش زیبایی را ارائه کرد. اما یووه به اهستگی بازی را در کنترل خود قرار داد و در نهایت پیروز میدان شد.

گل 253 اله
دل پیرو با این هدف که می تواند گلی دیگر را به ثمر رساند در ترکیب حاضر شد. کاپیتان یک ضربه ایستگاهی به دست اورد و بار دیگر با هنر خاص خود ضربه ای را به توپ زد تا توپ ارسالی وارد دروازه حریف شود و یک گل زیبای دیگر به دست اید، گلی از روی ضربه ایستگاهی.

نمایش فوق العاده امائوری
دل پیرو گل زد اما امائوری بسیار موثر و دیدنی ظاهر شد. در طول 90 دقیقه این مهاجم با هنر و توانایی فراوان خود بارها مهاجمین و هم تیمی های خود را صاحب فرصت کرد و بارها نیز در استانه گلزنی قرار گرفت. در مجموع بازیکنان یووه نمایش مطلوب و قابل قبولی را ارائه کردند و نشان دادند به دنبال ادامه نتایج سال 2008 هستند.

ترکیب و امتیاز بازیکنان یووه
منینگر 7 - گریگرا 6 - لگروتالیه 5/6 - ملبرگ 7 - مولینارو 6 - مارکیونی 6 - مارکیزیو 5/6 - سیسوکو 6 - ندود 5/5 - امائوری 7 - دل پیرو 5/6 - رانیری 5/6

صحبت پایانی
کلودیو رانیری پس از سه امتیاز ارزشمند در حالیکه چندان از نمایش یووه راضی نبود گفت: یووه بسیار بزرگ نشان نداد اما بازیکنان همگی با کیفیتی بالا در ترکیب حاضر شدند به ویژه دل پیرو که فوق العاده اماده نشان داد. این پیروزی بسیار مهم بود باید سال را با پیروزی اغاز می کردیم و شایستگی 2008 را دنبال می کردیم. مطمئنا در دیدارهای اینده بهتر و هماهنگ تر خواهیم بود. در مجموع از حریف سرتر بودیم اما باید بهتر و اماده تر شویم.

اما چهره خرسند و شاد میدان الکس است، او که بار دیگر با ضربه ای ایستگاهی گلی دیگر را به ثمر رساند تا همچنان مرد برتر سیاه و سفیدپوشان باشد. او پس از پایان بازی در سخنانی گفت: خیلی خوشحالم به این دلیل که پیروز یک دیدار دشوار هستیم. پیش از پیش به اینتر نزدیک شدیم ما راه خود را ادامه خواهیم داد. او از هم تیمی هایش تشکر کرد و بازی و نمایش انان را ستود. کاپیتان واکنش های منینگر را عالی توصیف و تاکید کرد در غیاب بوفون او به خوبی از دروازه یووه حفاظت کرده است. کاپیتان در پایان از گروه یووه به عنوان یک گروه یگانه و با روحیه ای مبارزه طلبانه یاد کرد که قصد توقف ندارد. با این حال از بازگشتم با گل بسیار خوشحالم و به پیروزی های بیشتر فکر میکنم.
جمعه بیست و هفتم 10 1387
خبری خوش برای رانیری و تیفوسی های بیانکونری، یوونتوس که پس از پیروزی برابر سیه نا خیلی زود به تمرین بازگشت تا خود را اماده رقابت های کوپا نماید پیش از اغاز تمرینات متوجه شد دو مهره ارزشمند خود را در کنار گروه خواهد داشت. دیوید ترزگه و تیاگو با تشخیص پزشکان مجوز حضور در تمرینات گروهی را کسب کردند تا پیش از گذشته به حضور در ترکیب اصلی بیانکونری نزدیک تر شوند. نزویچ و صالی امیجیچ نیز شرایط بهتری دارند و به نظر می رسد اهسته اهسته شرایط به روال عادی خود بازخواهد گشت.
مهاجم فرانسوی که از بازگشت کامل در تمرینات بسیار خرسند است به راحتی و بدون مشکل در تمام دقایق تمرینات شرکت کرد و ابراز امیدواری کرد پایان ژانویه پایان مصدومیت وی باشد.
زبینا که از ابتدای فصل با مصدومیت شدید دور از میادین است جلسات فیزیوتراپی را به خوبی پشت سر می گذارد و در حال حاضر فلورانس به سر می برد و هفته اینده به تورینو باز می گردد تا در صورت کسب امادگی در تمرینات شرکت کند. نزویچ قادر به همراهی تیم نیست در تورینو جلسات فیزیوتراپی را انجام می دهد.
مهره بوسنیایی که در دیدار دوستانه مقابل موناکو با مشکلات گذشته و مصدومیت پای چپ خود روبروشد پس از فیزیوتراپی می تواند تمرینات ویژه ای دنبال میکند و طی چند روز اینده به گروه می پیوندد.
و در پایان مولینارو، کیه لینی، کامورانزی و یاکوئنتا نیز به زودی امادگی لازم را کسب خواهند کرد.
جمعه بیست و هفتم 10 1387
دیه گو ستاره ی برزیلی برمن روز به روز به یووه نزدیک تر می شود و انتظار می رود این دفعه بر خلاف دفعات گذشته مذاکرات جدی میان سران دو باشگاه در حال شکل گیری می باشد. السیو سکو مدیر نقل و انتقالات یووه هفته ی اینده برای نهایی کردن این جا به جایی به المان سفر خواهد کرد. یوونتوس از مدت ها پیش به دنبال این بازیکن برزیلی بوده است و این بار نیز دو باشگاه موافقت اولیه ی خود را برای این نقل و انتقال اعلام کرده اند. سکو در هفته ی اینده و پس از برگزاری دیدار تیم های یوونتوس - لاتزیو راهی المان خواهد شد تا بتواند نظر نهایی سران برمن را جلب کند و این ستاره راهی یووه شود. دیه گو تا سال 2011 با تیم برمن قرارداد دارد اما به نظر می رسد با مبلغ 20 میلیون یورو بتوان رضایت نامه ی این برزیلی را صادر کرد.
جمعه بیست و هفتم 10 1387
کلودیو رانیری دست به ریسک نمی زند برابر کاتانیا نیز بهترین ترکیب را راهی میدان خواهد کرد. قصد کنار رفتن از رقابت های جام حذفی را ندارد. او به همراه شاگردانش در انتظار یک رقابت در کوپا برابر کاتانیا هستند و به پیروزی در این مسابقات می اندیشیند. مربی بانوی پیر که پیروزی دیدار نخست سال را به فراموشی سپرده در کنفرانس خبری پیش از دیدار فردا شب از کسب پیروزی خبر می دهد و می گوید: این دیدار، رقابتی ست برای پیروزی زیرا ما این جام را می خواهیم. یوونتوس پیش از این نه مرتبه این جام را از ان خود کرده است و ما می خواهیم دهمین جام را به خانه بیاوریم. خواسته ما نمایشی عالی در کلیه رقابت هاست، کامل و قدرتمند در کلیه مسابقات شرکت می کنیم. می خواهیم برای پیروزی به میدان رویم درست مانند انچکه تاکنون انجام داده ایم.
دیدار رفت جام حذفی ایتالیا که به میزبانی سیاه و سفیدپوشان تورینی در ورزشگاه المپیکو برگزار خواهد شد و با توجه به پخش مستقیم این دیدار از شبکه یوونتوس در ایتالیا و انگلیس از رانیری در خصوص احتمال حضور نیافتن تیفوسی ها با توجه به سرمای هوا سوال شد اما مربی بیانکونری معتقد است این یک دیدار مطلوب و تماشایی خواهد بود که جدال وی را زنگا را نشان خواهد داد و مطمئنا هواداران برای تماشای بازی به ورزشگاه خواهند امد.
وی به حریف اشاره کرد و گفت: من منتظر همان کاتانیایی هستم که در سری ا حاضر می شود هستم. همه تیم ها قدرتمند و خطرناکند. کاتانیا بسیار خوب بازی می کند و در نمایش و بازی با توپ در زمین بسیار مسلط ظاهر می شود.

بازیکنان دعوت شده یووه برای دیدار برابر کاتانیا
بوفون – ملبرگ – زانتی – امائوری – دل پیرو – منینگر – پولسن – جووینکو – گریگرا – سیسوکو – اکدال – مولینارو – دچلیه – مارکیونی – لگروتالیه – اسپوزیتو – اریائودو و یاگو
جمعه بیست و هفتم 10 1387
طی سه روز دو پیروزی ارزشمند کسب شد تا یوونتوس سال جدید را به خوبی و با شادی همراه با قدرت اغاز نماید. یوونتوس که با تمام نیرو در برابر کاتانیا به میدان نرفت برابر حریف به انچه می خواست دست یافت تا مربی از شاگردانش راضی باشد. همان طور که گفته بودیم می خواهیم مانند سال 2008 پیروزی ها را ادامه دهیم. نتیجه را کسب کردیم و به مرحله بعد صعود کردیم. بازگشت بوفون و زانتی رضایت بخش است و از اینکه جووینکو نیز نمایش مطلوبی داشت خوشحالم. از هم اکنون به دیدار برابر لاتزیو می اندیشیم و به تدابیری که به پیروزی در این میدان ختم شود متمرکز خواهیم شد. دیدار سخت در رم نزدیک است و ما باید با دقت و قدرت در میدان حاضرشویم.
جمعه بیست و هفتم 10 1387
در خانه یوونتوس درب های ادامه حضور و تمدید قرارداد با ستاره های باارزش و اینده دار بسته نخواهد بود. گفته می شود مسولین بانوی پیر در تلاشند تا رضایت هافبک چک تبار را برای یک فصل دیگر جلب نمایند. پاول ندود یک مهره تاثیر گذار و بزرگ است که حضورش در میانه میدان در این سن نیز موثر و کارساز است، رانیری و مدیران به خوبی از اهمیت حضور چنین بازیکنی اگاهند و طی جلساتی قصد کسب توافق با ندود برای تمدید یک ساله قرارداد فعلی اش هستند. البته پاول تنها مهره بزرگ بیانکونری نیست که احتمالا طی هفته های اینده بر سر میز قرارداد بیانکونری خواهد نشست، در این میان از تمایل یووه برای تمدید قرارداد کلودیو مارکیزیو جوان خوش تکنیک و اینده دار و احتمال افزایش مدت قرارداد جیجی بوفون تا سال 2014 خبر می رسد
جمعه بیست و هفتم 10 1387

تا این لحظه گلزنی در استادیوم المپیکو را تجربه نکرده بود. برابر کاتانیا فرصت مناسبی پیدا کرد تا در کنار دل پیرو در ترکیب یووه حاضر شود و شایستگی های خود را ثابت نماید. هم تیمی هایش برای گلزنی او تلاش کردند و بارها او را در فرصت گلزنی قرار دادند. در این میان کاپیتان بیشتر از دیگران سعی کرد تا وارثش را به گل نزدیک کند و سرانجام با پاسی زیبا و بی نقص و با حرکتی که از سوی سبا اغاز شده بود موفق شد یار جوان را در فرصت گلزنی قرار دهد و او نیز با ضربه ای دیدنی نخستین گل خود را در خانه برای سیاه و سفیدپوشان به ثمر رساند تا در این پیروزی سهم بزرگی داشته باشد.
گل زدم، کودکی تمام شد. خوشحالم ممنونم از دل پیرو که به من پاس زیبایی داد و مرا در اغوش گرفت. اما ممنونم از تمام هم تیمی هایم که مرا دلگرم و تشویق کردند. یک دلگرمی بزرگ و واقعی. همچنین از امائوری که در نیمه نخست توپ مناسبی برای من ارسال کرد، خیلی خوشحالم که نمایش خوبی ارائه کردم. تنها خواسته من کسب فرصت است و می خواهم با این پیراهن و با این تیم تجربه کسب کنم.

جمعه بیست و هفتم 10 1387

در مدتی که به عنوان جانشین مائورو کامورانزی در ترکیب بانوی پیر قرار می گیرد یک بازیکن شایسته و موفق نشان داده، غیبت هافبک ایتالیایی – ارژانتینی کمتر احساس می شود و در لحظاتی همکاری بسیار خوبی با کاپیتان دارد. زننده گل نخست بیانکونری در دیدار برابر کاتانیا از نمایش یووه راضی و خشنود است " خوشحالم از نتیجه و نمایشی که ارائه کردیم. مائورو یک قهرمان بزرگ است و من از او نکته های فراوانی اموختم. من باید کمی دیگر تلاش کنم تا نوبت حضور در ترکیب فرا رسد. علاقه خود را به پیراهن تیم ملی پنهان نمی کنم، به هر حال دوران باشکوهی را با یووه سپری می کنم و از این لحظات لذت می برم. در صورتی که در ماه فوریه به تیم ملی دعوت شوم فوق العاده احساس خوشبختی خواهم کرد.
وی به اسیب دیدگی خود در گذشته اشاره می کند و می گوید: دو سال سخت را پشت سر گذاشتم اما در حال حاضر امیدوارم بتوانم بدون مشکل ادامه دهم. احساس امادگی می کنم و هر روز در تمرینات با امادگی بیشتر حاضر می شوم. همیشه باید رشد و پیشرفت کرد.
مارکو از بازگشت مصدومین یووه خوشحال است " اسیب دیده های زیادی داشتیم اما اهسته اهسته انان را در کنار خود می بنیم، به انها نیاز داریم باید تا پایان راه به خوبی پیش رویم، تا امروز بدون انان خوب نتیجه گرفتیم .
هافبک بیانکونری در ادامه از بوفون می گوید: جیجی قیمت ندارد، مطمئنا یافتن سنگربانی مانند او بسیار دشوار است. یووه هرگز او را از دست نخواهد داد.
اما بانوی پیر در لیگ قهرمانان حضور دارد و این رقابت ها یک هدف بزرگ به شمار می رود، مارکیونی به این مسئله نیز اشاره ای کوتاه می کند " ما در سه جام معتبر حضور داریم و برای هر یک برنامه های خاصی در پیش داریم. باید در دیدارهای سختی که در سری ا پیشروی دایم مانند بازی برابر لاتزیو، فیورنتیا و اودینزه پیروز شویم و نیم نگاهی نیز به لیگ قهرمانان داشته باشیم، به رقابتی که برای ما ارزش و اعتباری بزرگ داشته باشیم. پیروزی را می خواهیم و برای کسب ان تلاش خواهیم کرد.
مارکیونی در پایان به پست خود در یوونتوس پرداخت و تاکید کرد به بازی در پست هافبک سمت چپ علاقه زیادی دارد اما در دیدارهای ترجیح داده می شود در سمت راست بازی کند، به هر حال نقش او چنین است و از شرایط خوب راضی است.

جمعه بیست و هفتم 10 1387
کریستینو زانتی هافبک تیم یوونتوس آمادگی خود پس از بازگشت از مصدومیت و بازی در برابر کاتانیا بسیار خوشحال است. این بازیکن جنگنده در ابتدای فصل با مشکل مصدومیت روبرو شد و مدت بسیار زیادی از نیم فصل اول را بیرون از میدان سپری کرد. شب گذشته یووه با 3 گل حریف خود کاتانیا را در جام حذفی ایتالیا شکست داد و این بهترین هدیه برای بازگشت کریستینو به او بود: "من از بازی خودم راضی ام. من مدت طولانی را بدون بازی سپری کردم ولی مشکلی در این بازی با هم تیمی هایم نداشتم. احساس خوبی دارم و مطمئن هستم که بار دیگر به شرایط مطلوب باز می گردم. کل تیم در برابر کاتانیا خوب بودند چون ما سعی داشتیم شخصیت اصلی خود را به نمایش بگذاریم. کوپا ایتالیا هم برای ما هدف محسوب می شود درست مانند لیگ قهرمانان و ما با جدیت آن را دنبال خواهیم کرد. ما در همه جام ها مدعی هستیم زیرا ترکیب بسیار خوبی داریم و مربی که با این همه مصدوم تیم را در شرایط مطلوب نگه داشته است.
جمعه بیست و هفتم 10 1387

هفته چهاردهم(اول برگشت)       چهارشنبه ۱۱/۱۰/۸۷

بیم مازندران - فولاد ارومیه
پیکان تهران - شهرداری همدان
گل گهر سیرجان - سایپا تهران
بانک صادرات ایران - پادیسان گنبد 
برق کرمان - داماش گیلان 
سنگ آهن بافق - پتروشیمی بندر امام 
ارتعاشات صنعتی - دانشگاه آزاد تهران


* هفته پانزدهم(دوم برگشت)       شنبه ۲۱/۱۰/۸۷

شهرداری همدان - بیم مازندران
پتروشیمی بندر امام - فولاد ارومیه
سایپا تهران - داماش گیلان
بانک صادرات ایران - دانشگاه آزاد تهران
گل گهر سیرجان - پیکان تهران
پادیسان گنبد - سنگ آهن بافق
ارتعاشات صنعتی - برق کرمان


* هفته شانزدهم(سوم برگشت)     چهارشنبه ۲۵/۱۰/۸۷

بیم مازندران - پتروشیمی بندر امام
شهرداری همدان - گل گهر سیرجان
فولاد ارومیه - پادیسان گنبد
برق کرمان - بانک صادرات ایران
داماش گیلان - پیکان تهران
دانشگاه آزاد تهران - سنگ آهن بافق
ارتعاشات صنعتی - سایپا تهران


* هفته هفدهم(چهارم برگشت)      یکشنبه ۲۹/۱۰/۸۷

گل گهر سیرجان - بیم مازندران
پادیسان گنبد - پتروشیمی بندر امام
داماش گیلان - شهرداری همدان
سنگ آهن بافق - برق کرمان
فولاد ارومیه - دانشگاه آزاد تهران
بانک صادرات ایران - سایپا تهران
ارتعاشات صنعتی - پیکان تهران


* هفته هجدهم(پنجم برگشت)      چهارشنبه ۲/۱۱/۸۷ 

بیم مازندران - پادیسان گنبد
گل گهر سیرجان - داماش گیلان
سایپا تهران - سنگ آهن بافق
برق کرمان - فولاد ارومیه 
دانشگاه آزاد تهران - پتروشیمی بندر امام
بانک صادرات ایران - پیکان تهران 
شهرداری همدان - ارتعاشات صنعتی


* هفته نوزدهم(ششم برگشت)        چهارشنبه ۹/۱۱/۸۷

داماش گیلان - بیم مازندران 
پتروشیمی بندر امام - برق کرمان 
شهرداری همدان - بانک صادرات ایران
پیکان تهران - سنگ آهن بافق
پادیسان گنبد - دانشگاه آزاد تهران
فولاد ارومیه - سایپا تهران
ارتعاشات صنعتی - گل گهر سیرجان


* هفته بیستم(هفتم برگشت)         یکشنبه ۱۳/۱۱/۸۷

بیم مازندران - دانشگاه آزاد تهران
گل گهر سیرجان - بانک صادرات ایران
سنگ آهن بافق - شهرداری همدان 
سایپا تهران - پتروشیمی بندر امام
برق کرمان - پادیسان گنبد
فولاد ارومیه - پیکان تهران
برق کرمان - ارتعاشات صنعتی


* هفته بیست و یکم(هشتم برگشت)         چهارشنبه ۱۶/۱۱/۸۷

بیم مازندران - ارتعاشات صنعتی تهران
بانک صادرات ایران - داماش گیلان 
سنگ آهن بافق - گل گهر سیرجان
شهرداری همدان - فولاد ارومیه
دانشگاه آزاد - برق کرمان
پیکان تهران - پتروشیمی بندر امام
پادیسان گنبد - سایپا تهران


* هفته بیست و دوم(نهم برگشت)

برق کرمان - بیم مازندران
داماش گیلان - سنگ آهن بافق
فولاد ارومیه - گل گهر سیرجان
پتروشیمی بندر امام - شهرداری همدان
پادیسان گنبد - پیکان تهران
سایپا تهران - دانشگاه آزاد تهران
ارتعاشات صنعتی - بانک صادرات ایران


* هفته بیست و سوم(دهم برگشت)

بیم مازندران - بانک صادرات مشهد
سایپا تهران - برق کرمان
فولاد ارومیه - داماش گیلان 
شهرداری همدان - پادیسان گنبد
گل گهر سیرجان - پتروشیمی بندر امام
دانشگاه آزاد تهران - پیکان تهران
سنگ آهن بافق - ارتعاشات صنعتی


* هفته بیست و چهارم(یازدهم برگشت)

بیم مازندران - سایپا تهران
پتروشیمی بندر امام - داماش گیلان
دانشگاه آزاد تهران - شهرداری همدان 
برق کرمان - پیکان تهران 
بانک صادرات ایران - سنگ آهن بافق
پادیسان گنبد - گل گهر سیرجان
ارتعاشات صنعتی - فولاد ارومیه


* هفته بیست و پنجم(دوازدهم برگشت)

پیکان تهران - بیم مازندران 
سنگ آهن بافق - فولاد ارومیه
پتروشیمی بندر امام - بانک صادرات ایران
گل گهر سیرجان - برق کرمان 
سایپا تهران - شهرداری همدان
داماش گیلان - دانشگاه آزاد تهران
پادیسان گنبد - ارتعاشات صنعتی


* هفته بیست و ششم و پایانی(سیزدهم برگشت)

بیم مازندران - سنگ آهن بافق
شهرداری همدان - برق کرمان
فولاد ارومیه - بانک صادرات ایران
داماش گیلان - پادیسان گنبد
دانشگاه آزاد تهران - گل گهر سیرجان
سایپا تهران - پیکان تهران
ارتعاشات صنعتی - پتروشیمی بندر امام

جمعه بیست و هفتم 10 1387
برنامه کامل دور برگشت رقابت های لیگ برتر بسکتبال

 

 

هفته اول(دور برگشت) :
دوشنبه ۷ - بهمن - ۸۷

بیم مازندران - هیئت بسکتبال شهرکرد
شهرداری گرگان - آرارات تهران
تراکتورسازی کردستان - صبا مهر تهران
هیئت بسکتبال لنگرود - ذوب آهن اصفهان
هیئت بسکتبال خراسان رضوی - مهرام تهران
*** در هفته اول تیم لوله as شیراز استراحت دارد.

------------------------------------------

هفته دوم(دور برگشت) :
پنجشنبه ۱۰ - بهمن - ۸۷

پتروشیمی بندرامام - بیم مازندران
صبای مهر - دانشگاه آزاد تهران
 آرارات تهران - ذوب آهن اصفهان
لوله as شیراز - تراکتورسازی سنندج
مهرام تهران - هیئت بسکتبال لنگرود
هیئت بسکتبال شهرکرد - شهرداری گرگان
*** در هفته دوم تیم هیئت بسکتبال خراسان رضوی استراحت دارد.

------------------------------------------

هفته سوم(دور برگشت) :
دوشنبه ۱۴ - بهمن - ۸۷

بیم مازندران - صبا مهر تهران
دانشگاه آزاد تهران - لوله as شیراز
آرارات تهران - مهرام تهران
هیئت بسکتبال لنگرود - هیئت بسکتبال خراسان رضوی
ذوب آهن اصفهان - هیئت بسکتبال شهرکرد
پتروشیمی بندرامام - شهرداری گرگان
*** در هفته سوم تیم تراکتورسازی سنندج استراحت دارد.

------------------------------------------

هفته چهارم(دور برگشت) :
پنجشنبه ۱۷ - بهمن - ۸۷

لوله as شیراز - بیم مازندران
مهرام تهران - هیئت بسکتبال شهرکرد
هیئت بسکتبال خراسان رضوی - آرارات تهران
تراکتورسازی سنندج - دانشگاه آزاد تهران
شهرداری گرگان - صبای مهر
ذوب آهن اصفهان - پتروشیمی بندرامام
*** در هفته چهارم تیم هیئت بسکتبال لنگرود استراحت دارد.

------------------------------------------

هفته پنجم(دور برگشت) :
دوشنبه ۲۱ - بهمن - ۸۷

بیم مازندران - تراکتورسازی سنندج
آرارات تهران - هیئت بسکتبال لنگرود
هیئت بسکتبال شهرکرد - هیئت بسکتبال خراسان رضوی
لوله as شیراز - شهرداری گرگان
پتروشیمی بندرامام - مهرام تهران
صبای مهر - ذوب آهن اصفهان
*** در هفته پنجم تیم دانشگاه آزاد تهران استراحت دارد.

------------------------------------------

هفته ششم(دور برگشت) :
پنجشنبه ۲۴ - بهمن - ۸۷

دانشگاه آزاد تهران - بیم مازندران
مهرام تهران - صبای مهر
هیئت بسکتبال لنگرود - هیئت بسکتبال شهرکرد
شهرداری گرگان - تراکتورسازی سنندج
هیئت بسکتبال خراسان رضوی - پتروشیمی بندرامام
ذوب آهن اصفهان - لوله as شیراز
*** در هفته ششم تیم آرارات تهران استراحت دارد.

------------------------------------------

هفته هفتم(دور برگشت) :
پنجشنبه ۱ - اسفند - ۸۷

دانشگاه آزاد تهران - شهرداری گرگان
لوله as شیراز - مهرام تهران
هیئت بسکتبال شهرکرد - آرارات تهران
پتروشیمی بندرامام - هیئت بسکتبال لنگرود
تراکتورسازی سنندج - ذوب آهن اصفهان
صبا مهر تهران - هیئت بسکتبال خراسان رضوی
*** در هفته هفتم تیم بیم مازندران استراحت دارد.

------------------------------------------

هفته هشتم(دور برگشت) :
دوشنبه ۵ - اسفند - ۸۷

شهرداری گرگان - بیم مازندران
مهرام تهران - تراکتورسازی سنندج
پتروشیمی بندرامام - آرارات تهران
ذوب آهن اصفهان - دانشگاه آزاد تهران
هیئت بسکتبال لنگرود - صبا مهر تهران
هیئت بسکتبال خراسان رضوی - لوله as شیراز
*** در هفته هشتم تیم هیئت بسکتبال شهرکرد استراحت دارد.

------------------------------------------

هفته نهم(دور برگشت) :
جمعه ۹ - اسفند - ۸۷

بیم مازندران - ذوب آهن اصفهان
دانشگاه آزاد تهران - مهرام تهران
صبا مهر تهران - آرارات تهران
پتروشیمی بندرامام - هیئت بسکتبال شهرکرد
لوله as شیراز - هیئت بسکتبال لنگرود
تراکتورسازی کردستان - هیئت بسکتبال خراسان رضوی
*** در هفته نهم تیم شهرداری گرگان استراحت دارد.

------------------------------------------

هفته دهم(دور برگشت) :
دوشنبه ۱۲ - اسفند - ۸۷

مهرام تهران - بیم مازندران
آرارات تهران - لوله as شیراز
هیئت بسکتبال خراسان رضوی - دانشگاه آزاد تهران
ذوب آهن اصفهان - شهرداری گرگان
هیئت بسکتبال شهرکرد - صبا مهر تهران
هیئت بسکتبال لنگرود - تراکتورسازی کردستان
*** در هفته دهم تیم پتروشیمی بندرامام استراحت دارد.

------------------------------------------

هفته یازدهم(دور برگشت) :
پنجشنبه ۱۵ - اسفند - ۸۷

بیم مازندران - هیئت بسکتبال خراسان رضوی
شهرداری گرگان - مهرام تهران
دانشگاه آزاد تهران - هیئت بسکتبال لنگرود
صبا مهر تهران - پتروشیمی بندرامام
لوله as شیراز - هیئت بسکتبال شهرکرد
تراکتورسازی سنندج - آرارات تهران
*** در هفته یازدهم تیم ذوب آهن اصفهان استراحت دارد.

------------------------------------------

هفته دوازدهم(دور برگشت) :
دوشنبه ۱۹ - اسفند - ۸۷

هیئت بسکتبال لنگرود - بیم مازندران
آرارات تهران - دانشگاه آزاد تهران
مهرام تهران - ذوب آهن اصفهان
پتروشیمی بندرامام - لوله as شیراز
هیئت بسکتبال خراسان رضوی - شهرداری گرگان
هیئت بسکتبال شهرکرد - تراکتورسازی کردستان
*** در هفته دوازدهم تیم صبای مهر استراحت دارد.

------------------------------------------

هفته سیزدهم(دور برگشت) :
پنجشنبه ۲۲ - اسفند - ۸۷

بیم مازندران - آرارات تهران
هیئت بسکتبال شهرکرد - دانشگاه آزاد تهران
صبا مهر تهران - لوله as شیراز
ذوب آهن اصفهان - هیئت بسکتبال خراسان رضوی
تراکتورسازی کردستان - پتروشیمی بندرامام
شهرداری گرگان - هیئت بسکتبال لنگرود
*** در هفته سیزدهم تیم مهرام تهران استراحت دارد.

جمعه بیست و هفتم 10 1387

 چطوری میشه توی گوگل بریم و موضوعاتی رو که انتخاب کردیم به صورت لیست واسمون باز نشه.

این سوال یکی از تبیانی های عزیز بود.من سوال رو متوجه نشدم.یه مقدار سر بسته بود.دوست عزیز در مورد سوال بیشتر توضیح بده تا بتونم بهتون کمک کنم.

جمعه بیست و هفتم 10 1387


سلام به دوستان تبیانی عزیز مخصوصا ....

مطالب طولانی بود چون آموزشها یک مقدار تخصصی بودن دیگه تیکه نمی شد.در ضمن هر سوالی هم در زمینه کامپیوتر وبرنامه نویسی دارین لینک خودتون رو بزارین تا جواب رو واستون بذارم.یه نظر یا انتقاد هم در مورد وبلاگ من و پستهایی که گذاشتم و....بذارین ببینم کارم چطور بوده.

فعلا

دسته ها :
جمعه بیست و هفتم 10 1387
تعداد خطوط برنامه نویسی شده در ویندوز 95 تعداد 11.2 میلیون خط بوده است در حالیکه در ویندوز ویستا ، حداقل 50 میلیون خط برنامه وجود دارد. برای تولید ویندوز 95 دقیقا 200 برنامه نویس مشغول به کار بودند و در ویندوز ویستا 2000 برنامه نویس به صورت همزمان مشغول به کار بوده‌اند.
دسته ها : علوم و فن آوری
پنج شنبه بیست و ششم 10 1387
مقایسه VB و C++ از نظر سرعت ترجمه
شاید وقتی یک برنامه ی ساده که عملیات سنگینی نداره رو مینویسیم با مشکل سرعت اجرا مواجه نشیم.اما گاهی یکی از بزرگترین مشکل ها همین سرعت اجرا هستش.مثلا یک بازی کامپیوتری 3 بعدی به خاطر اینکه روون باشه و اصلا بشه باش بازی کرد باید تا اونجا که ممکنه سرعت اجرای کد رو بالا برد.

میخوام یک کد ساده رو با VB و با سی بنویسم و کامپایل کنم و اختلاف زمان اجرای این کد روببینیم.
کارش ساده هستش.یه حلفه ی معمولی که 1000 بار تکرار میشه و هر بار 0.00001 به یک مقدار double اضافه میکنه.

*** کد VB ***
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Sub Form_Load()
Dim start_time As Long: start_time = GetTickCount()
Dim i As Double: i = 0
Do While (i < 1000)
i = i + 0.00001
Loop
Dim op_time As Long: op_time = GetTickCount() - start_time
MsgBox "Elapsed time : " & op_time & "ms"
End Sub

*** کد C++ ***
#include "stdafx.h"
#include "windows.h"
#include "stdio.h"
#include "conio.h"
int main(int argc, char* argv[])
{
DWORD start_time = GetTickCount();
double i=0;
while (i < 1000) {
i += 0.00001;
}
DWORD op_time = GetTickCount() - start_time;
printf("Elapsed time : %dms\n",op_time);
getch();
return 0;
}

نتایج :
C++ : 437 میلی ثانیه
VB : 2047 میلی ثانیه
یعنی یه چیزی بیشتر از 5 برابر توی این عملیات سرعت C++ بیشتر هستش.
پنج شنبه بیست و ششم 10 1387
این تابع واسه گرفتن عکس از یه window هستش.در واقع این تابع یه قسمت یا همه پیکسل های یه پنجره(مبدا) رو داخل یه پنجره دیگه (مقصد) کپی میکنه.ما میتونیم یه picture box که توی برناممون هستش رو مقصد قرار بدیم و بعد از قرار داده شدن تصویر پنجره مبدا توی مقصد با SavePicture عکسی که از پنجره مورد نظر گرفتیم رو ذخیره کنیم:

Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long

آرگومان اول hDC ی پنجره مقصد هستش.دومی x جایی هستش که میخواهییم رسم شدن روی پنجره مقصد از اونجا شروع بشه
سومی هم y جاییه که گفتم.بعدی عرض نقطه ای هستش که میخواهیم عکس تا اونجا گرفته بشه.بعدی طول نقطه ای هستش که گفتم.بعدی hDC ی پنجره ی مقصده.بعدی x نقطه ای هستش که میخواهیم عکس گرفتن از اونجا شروع بشه . بعدی هم y اون نقطه ای هستش که گفتم. آرگومان بعدی هم نوع عکس گرفتن رو نشون میده که مقدار های زیر رو میشه بهش بدیم:


Private Const SRCAND = &H8800C6
Private Const SRCCOPY = &HCC0020
Private Const SRCERASE = &H440328
Private Const SRCINVERT = &H660046
Private Const SRCPAINT = &HEE0086

به طور معمول Private Const SRCCOPY = &HCC0020 رو باید قرار بدیم
یکی از کارهایی که میشه با این تابع کرد عکس گرفتن ازصقحه مانیتوره .یعنی ما با استفاده از تابع getdc ، hdc ی کل صفحه (چیزی که توی مانیتور داره نشون داده میشه) رو به تابع میدیم و با این کار یه عکس از چیزی که توی مانیتور داره نشون داده میشه عکس میگیریم.
یه دکمه و یه PictureBox توی فرم بزارین خصوصیت autoredraw ش رو true کنین و کد زیر رو وارد کنین:

Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Const SRCCOPY = &HCC0020 ' (DWORD) dest = source
Private Sub Command1_Click()
Picture1.Width = Screen.Width
Picture1.Height = Screen.Height
Me.Hide
BitBlt Picture1.hDC, 0, 0, Screen.Width / 15, Screen.Height / 15, GetDC(0), 0, 0, SRCCOPY
SavePicture Picture1.Image, "D:\test.bmp"
unload me
End Sub

اول اندازه Picture Box رو برابر با اندازه صفحه مانیتور میکنیم تا بشه از کل صفحه مانیتور عکس گرفت.
بعد فرم رو پنهان میکنیم تا عکس خود فرم توی تصویر نیفته. بعد با تابعی که گفتم از صفحه عکس میگیریم.ارگومان اول که hdc ی PictureBox هستش.دومی و سومی رو 0 قرار دادم تا عکس از نقطه 0،0 یعنی از بالا و سمت چپ picturebox شروم به رسم شدن بشه.سومی هم طول و عرض صفحه نمایش هست چون میخواهیم از همه صفحه عکس بگیریم.اونا رو بر 15 تقسیم کردم چون توی ویبی به طور پیشفرض این مقدار ها بر حسب twip به ما داده میشه ولی ما باید بر حسب پیکسل به تابع بدیم.بعدی رو هم که توضیح دادم.2 مقدار بعدی رو هم 0 قرار دادم چون میخوام عکس از نقطه 0و0 صفحه نمایش شروع که گرفتن بشه.بعد از اینکه عکس گرفته شد و توی picturebox قرار گرفت اون رو save میکنیم.بعد هم برنامه بسته میشه.

2.StretchBlt
کار این تابع خیلی شبیه قبلی هستش ولی این تابع علاوه بر اینکه میتونه عکس بگیره عکس مورد نظر رو به نسبتی که بش میدیم میتونه کوچیک و یا بزرگ کنه:

Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long

همونطور که میبینین 2 تا آرگومان دیگه اضافه شده
عکسی که گرفته میشه در نهایت طول و عرضش برابر nWidth و nHeight میشه و توی picturebox رسم میشه.یعنی اگه ما عکس رو از کل صفحه نمایش بگیریم و مقدار این 2 آرگومان رو نصف طول و عرض صفحه نمایش قرار بدیم چون عکس باید به این اندازه ها در بیاد کل عکس به نسبت کوچک میشه در صورتی که توی تابع قبلی برای اینکه به این اندازه ها در بیاد فقط قسمتی از عکس نمایش داده میشد نه همش یعنی اونجا همه عکس رسم نمیشد ولی اینجا همه عکس نشون داده میشه ولی با اندازه متفاوت(بر عکس این حالت هم اگه 2 آرگومان رو 2 برابر صفحه نمایش مقاد دهی کنیم اتفاق میفته و عکس بزرگ میشه البته توی این حالت برای اینکه همه عکس رسم بشه باید اندازه PictureBox رو هم 2 برابر صفحه نمایش کنیم)

حالا اگه نخواهیم از همه صفحه نمایش(یا کلا پنجره مورد نظر) عکس بگیریم به جای اینکه مثل تابع قبلی nWidth و nHeight رو کم کنیم nSrcWidth و nSrcHeight رو کم میکنیم (باید به عرض و طولی که اول میدیم هم توجه کنین و اوا رو هم کم کنین و اگرنه کار درست انکام نمیشه) در غیر این صورت nSrcWidth و nSrcHeight رو برابر اندازه کل پنجره قرار میدیم .
شاید این توضیحایی که دادم یکم گیجتون کرده باشه و درست متوجه نشده باشین.خودتون که یکم با تابع کار کنین میفهمین چی میگم.
یه برنامه مینویسیم که عکس رو از صفحه نمایش بگیره ول اندازه اونو 2 برابر کنه و اونو ذخیره کنه.یه دکمه و یه PictureBox بزارین و خصوصیت autoredraw ش رو true کنین :

Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
Private Const SRCCOPY = &HCC0020 ' (DWORD) dest = source
Private Sub Command1_Click()
Picture1.AutoRedraw = True
Picture1.Width = Screen.Width * 2
Picture1.Height = Screen.Height * 2
Me.Hide
StretchBlt Picture1.hdc, 0, 0, Screen.Width / 7.5, Screen.Height / 7.5, GetDC(0), 0, 0, Screen.Width / 15, Screen.Height / 15, SRCCOPY
Me.Show
SavePicture Picture1.Image, "D:\test.bmp"
End Sub

3.TextOut
این تابع واسه چاپ کردن یه متن روی یه پنجره بکار میره:

Private Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long

آرگومان اول hdc ی پنجره مورد نظره.دومی و سومی هم x و y ی مختصات نقطه ای هستش که مخواهیم متن چاپ بشه و اینجا نقطه 0 و 0 بالا سمت چپ پنجره مورد نظره بعدی هم متن مورد نظره بعدی .تعدد کاراکتری هستش که میخواهیم از متنی که به تابع دادیم از سمت چپ جدا بشه و چاب بشه که معمولا چون میخواهیم همه متن چاپ بشه باید این مقدار برار طول متن باشه.در ضمن متن با فونت و رنگ زمینه پنجره ای که hdc ش رو به تابع دادیم رسم میشه:

Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long
Private Sub Command1_Click()
Dim strText As String, Cnt As Long
strText = "API : Application programming interface... |"
For Cnt = 0 To 2
TextOut GetDC(0), 20 * Cnt * 20, Screen.Height / 30, ByVal strText, Len(strText)
Next
End Sub

4.این تابع هم کار تابع قبلی رو میکنه با این فرق که متن داخل یه محدوده چهار گوش شکل رسم میشه و میشه مشخص کرد با چه فرمتی(حالتی) این کار انجام بشه:

Private Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long

آرگومان های اول و دوم و سوم رو قبلا توضیح دادم.چهارمی هم یه متغیر از نوع rect که محدوده چهار گوش رو مشخص میکنه.پنجمی هم نوع چاپ شده هستش که مقدار هایی مثل این هارو میشه به تابع داد :

Private Const DT_BOTTOM = &H8 متن در پایین محدوده rect چاپ میشه
Private Const DT_CENTER = &H1 متن در وسط محدوده rect چاپ میشه
Private Const DT_LEFT = &H0 متن در سمت چپ محدوده rect چاپ میشه
Private Const DT_RIGHT = &H2 متن سمت راست محدوده rect چاپ میشه

به کد زیر توجه کنین:

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long
Private Const DT_CENTER = &H1
Private Sub Command1_Click()
Dim strText As String, R As RECT
R.Bottom = 200
R.Top = 0
R.Left = 0
R.Right = Screen.Width / 15
strText = "Applicatrion Programming Interface"
DrawText GetDC(0), ByVal strText, Len(strText), R, &H1
End Sub

توی این کد توی محدوده rect نقطه بالا و چپ 0 و 0 قرار داده شده (گوشه سمت چپ پنجره) و قسمت پایین rect 200 و سمت راست اون به اندازه عرض صفحه نمایش قرار داده شده
و فرمت هم Center (مرکز) قرار داده شده بنابراین وقتی تابع رو فرخوانی میکنیم y ی چیزی که چاپ شده 0 هستش و چون ما فرمت رو مرکز قرار دادیم x متنی که چاپ شده به اندازه نصف عرض صفحه نمایش هستش و وسطش چاپ میشه.

5.ExtracIcon

این تابع یه اشاره گر از آیکونی که توی یه فایل (اغلبا .dll) قرار گرفته بر میگردونه که از با استفاده از این اشاره گر میشه تابع رو روی یه پنجره رسم کرد(و ذخیرش کرد) :

Private Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" (ByVal hInst As Long, ByVal lpszExeFileName As String, ByVal nIconIndex As Long) As Long

آرگومان اول رو 0 قرار بدین.دومی آدرس فایل مورد نظره.سومی هم Index آیکونی هستش که توی فایل قرار گرفته.(آیکون هایی که به این صورت توی فایل ها قرار میگیرن دارای یه Index هستن)
یکسری از ایکون های ویندوز توی فایل [WinDrive]:\Windows\System\Shell32.dll قرار گرفتن
مثالش رو توی تابع بعد ببینین.

6.Drawicon
این تابع hDc ی یه پنجره و اشاره گر یه آیکون رو میگیره و اون رو توی پنجره رسم میکنه:

Private Declare Function DrawIcon Lib "user32" Alias "DrawIcon" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal hIcon As Long) As Long

آرگومان اول hdc ی پنجره مقصد هستش.دومی X نقطه شروع رسم و بعدی Y اون نقطه هستش.بعدی هم اشاره گر آیکون مورد نظره.
ُخصوصیت AutoRedraw فرم رو True کنین و کد زیر رو وارد کنین:

Private Declare Function DrawIcon Lib "user32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal hIcon As Long) As Long
Private Declare Function ExtractIcon Lib "shell32.dll" Alias "ExtractIconA" (ByVal hInst As Long, ByVal lpszExeFileName As String, ByVal nIconIndex As Long) As Long
Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Private Sub Form_Load()
Dim strpath As String, Buffer As String * 255, Cnt As Long
GetSystemDirectory Buffer, 255
strpath = Replace(Buffer, Chr(0), "") & "\Shell32.dll"
'///
Call DrawIcon(Me.hdc, 0, 0, ExtractIcon(0, ByVal strpath, 20))
End Sub

اول با تابع getsystemdirectory محل پوشه سیستم و بعد محل فایل Shell32.dll رو پیدا میکنیم.بعد هم آیکونی که Index ش 20 هست رو روی فرم رسم میکنیم
دسته ها :
پنج شنبه بیست و ششم 10 1387
تابع واسه آبی کردن و بعد به رنگ معمولی در آوردن (میشه گفت نور انداختن) عنوان و اسم یه (پنجره)فرم توی TaskBar بکار میره .شاید منظورمو نفهمیده باشین.ازش استفاده کنین تا بفهمین:

Private Declare Function FlashWindow Lib "user32" Alias "FlashWindow" (ByVal hwnd As Long, ByVal bInvert As Long) As Long

آرگومان اول هندل پنجره مورد نظر هست.
آرگومان دوم رو 1 قرار بدین (اگه صفر قرار بدین عمل مورد نظر–اگر در حال انجام باشه- متوقف میشه)
یه دکمه توی فرم بزارین:

Private Declare Function FlashWindow Lib "user32" Alias "FlashWindow" (ByVal hwnd As Long, ByVal bInvert As Long) As Long

Private sub Command1_Click()
FlashWindow Me.hWnd , 1
End Sub

Delphi:

procedure TForm1.Command1Click(Sender: TObject);
begin
FlashWindow(form1.Handle,true);
end;

توی این کد من هندل فرم برنامه خودم رو بش دادم.

2.GetForeGroundWindow
این تابع هندل فرم فعال(که رنگ نوار عنوانش با بقیه فرق داره و معمولا آبیه) رو برمیگردونه:

Private Declare Function GetForegroundWindow Lib "user32" () As Long

هیچ مقداری هم نیاز نیست بش بدیم.یه تایمر توی فرم بزارین و Interval ش رو 1 بزارین:

Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Sub Timer1_Timer()
Me.Caption = GetForegroundWindow()
End Sub

Delphi:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Form1.Caption := IntToStr(GetForegroundWindow());
end;

3.GetComputerName

این تابع نام کامپیوتری که برنامه داره توش اجرا میشه رو برمیگردونه.این اسم رو میتونین توی قسمت
System Properties (راست کلیک روی My Computer ؛ رفتن به Properties ) توی قسمت Computer Name ببینین.

Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

آرگومان اول یه متغیر هست که تابع نام مورد نظر رو توی این قرار میده و طولش باید از قبل تعیین شده باشه.آرگومان دوم هم مشخص میکنه که چند کاراکتر اول نام کامپیوتر توی متغیر قرار بگیره.این عدد باید با طور متغیر برابر باشه یا کوچکتر.بهتره جفتشون رو 255 قرار بدین.:

Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Private Sub Form_Load()
Dim buffer As String * 255
GetComputerName buffer, 255
MsgBox "Computer name : '" & Replace(buffer, Chr(0), "") & "'"
End Sub

Delphi:

procedure TForm1.FormCreate(Sender: TObject);
var Buffer : Array[1..MAX_PATH] of char ;
var MAX_SIZE : Cardinal;
begin
MAX_SIZE := sizeof(buffer) -1 ;
GetComputerName(@buffer,MAX_SIZE) ;
ShowMessage('Computer Name : ' + StrPas(@buffer));
end;

4.GetCurrentDirectory

این تابع آدرس پوشه ای که برنامه جاری توش داره اجرا میشه رو برمیگردونه.یعنی کار App.path رو انجام میده:

Private Declare Function GetCurrentDirectory Lib "kernel32" Alias "GetCurrentDirectory" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long

روش مقدار دادن آرگومان هاش هم شبیه تابع قبلیه فقط جای اونا عوض شده یعنی آرگومان اول برای تعداد کاراکتر
اول و آرگومان دوم یه متغییر واسه قرار دادن آدرس توی اون:

Private Declare Function GetCurrentDirectoryA Lib "kernel32" Alias "GetCurrentDirectory" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long

Private Sub Form_Load()
Dim buffer As String * 255
GetCurrentDirectoryA 255,Buffer
MsgBox "Current Directory : '" & Replace(buffer, Chr(0), "") & "'"
End Sub

Delphi:

procedure TForm1.FormCreate(Sender: TObject);
var buffer : array[1..MAX_PATH] of char;
begin
GetCurrentDirectoryA(sizeof(buffer),@buffer);
ShowMessage('Current Directory : ' + strpas(@buffer));
end;

5.GetDoubleClickTime
این تابع هم زمان Double Click که توی کنترل پنل توی قسمت موس مشخص شده رو برمیگردوونه:

Private Declare Function GetDoubleClickTime Lib "user32" Alias "GetDoubleClickTime" () As Long

هیچ مقداری هم نمیگیره:
Private Declare Function GetDoubleClickTime Lib "user32" Alias "GetDoubleClickTime" () As Long
Private Sub Form_Load()
Msgbox "DoubleClickTime : " & GetDoubleClickTime()
End Sub

Delphi:

procedure TForm1.FormCreate(Sender: TObject);
begin
ShowMessage('DoubleClickTime : ' + IntToStr(GetDoubleClickTime()));
end;
پنج شنبه بیست و ششم 10 1387
این تابع واسه تغییر مکان و تغییر اندازه Window ها بکار میره و چند تا کاره دیگه هم میکنه:

Private Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

مقدار اولی که میگیره هندل پنجره هستش.دومی طرز قرار گیفتن پنجره در محور z هستش.مثلا بالاتر از پنجره های دیگه قرار بگیره یا پایین تر و ... .مقدار هایی که این میگیره:

Private Const HWND_BOTTOM = 1
Private Const HWND_BROADCAST = &HFFFF&
Private Const HWND_DESKTOP = 0
Private Const HWND_NOTOPMOST = -2
Private Const HWND_TOP = 0
Private Const HWND_TOPMOST = -1

هر کدوم از اینارو بزارین ببینین چی میشه . مثلا topmost بالای پنجره های دیگه جتی اونایی که از قبل
Top بودن قرار میگیره.

مقدار سومی و چهارم هم x و y مختصات پنجره هستش که نسبت به پنجره parent (مادر) ش هستش به طوری که بالا و سمت چپ پنجره ء مادر نقطه (0 ، 0 ) حساب میشه.مقدار بعدی هم عرض و طول پنجره مورد نظر هستش.
حالا اگه نخواهیم همه این خصوصیات پنجره رو تغییر بدیم نمیشه مثل ویبی اونا رو مقدار دهی نکنیم.بعضی از مواقع میشه از Byval 0& استفاده کرد اما در مورد این تابع واسه اینکه نخواهیم همه خصوصیاتش رو تغییر بدیم باید آرگومان آخر رو مقدار دهی کنیم.بعضی از مقدار هایی که این میگیره :

Private Const SWP_NOMOVE = &H2 پنچره تغییر مکان نمیده
Private Const SWP_NOACTIVATE = &H10 پنجره فعال نمیشه
Private Const SWP_NOSIZE = &H1 پنجره تغییر اندازه نمیده
Private Const SWP_NOZORDER = &H4 جای پنجره در محور z عوض نمیشه
Private Const SWP_NOREDRAW = &H8 پنجره دوباره رسم نمیشه

یه تایمر و یه دکمه توی فرم بزارین و کد زیر رو وارد کنین:

Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOZORDER = &H4
Dim x As Integer, y As Integer

Private Sub Form_Paint()
Command1.SetFocus
Timer1.Interval = 100
End Sub

Private Sub timer1_timer()
x = Int(800 * Rnd())
y = Int(600 * Rnd())
SetWindowPos Me.hwnd, 0, x, y, 0, 0, SWP_NOSIZE Or SWP_NOZORDER
End Sub
Private Sub command1_click()
Unload Me
End Sub

اول focus رو به دکمه میدیم بعد .Interval مربوط به تایمر رو مقدار دهی میکنیم.توی Private Sub timer1_timer هم یه x و y
به طور تصادفی بدست میاریم توی خط بعد هم با استفاده از تابع مورد نظر پنجره رو حرکت میدیم.
حالا بعد از اجرا کردن برنامه کلید اینتر رو که بزنین برنامه بسته میشه.

2.CreateDirectory
این تابع واسه ساختن Folder بکار میره :

Private Declare Function CreateDirectory Lib "kernel32" Alias "CreateDirectoryA" (ByVal lpPathName As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long

آرگومان اول مسر پوشه ای که میخواهیم بسازیم هستش
دومی هم یه متغییر از نوع SECURITY_ATTRIBUTES که نیازی به مقدار دهی کردنش هم نیست

Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type

برای مثال :

Private Declare Function CreateDirectory Lib "kernel32" Alias "CreateDirectoryA" (ByVal lpPathName As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long
Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type

Dim SA as SECURITY_ATTRIBUTES
Private Sub Form_Load()
Createdirectory "D:\APItest",SA
End Sub

3.Sleep
این تابع برنامه ای که تابع توش فراخوانی شده رو توی زمانی که بش میدیم متوقف میکنه
آرگومانی که میگیره زمان مورد نظره که بر حسب میلی ثانیه هستش.
یه دکمه توی فرم بزارین :

Private Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)

Private Sub Command1_Click()
Sleep 2000 '2000 ms = 2 s
End Sub

4.BlockInput
این تابع بعد از فراخوانیش موس و کیبرد رو قفل میکنه یعنی دیگه کلید هایی که میزنین بر پنجره ها اثر نداره و موس رو که تکون میدین کرسرش حرکت نمیکنه:

Private Declare Function BlockInput Lib "user32" (ByVal fBlock As Long) As Long

مقداری که میگیره اگه 0 باشه عمل قفل شدن متوقف میشه و اگه 1 باشه موس و کیبرد قفل میشه.اگه با این تابع موس و کیبرد رو قفل کردین یه فکری هم به فکر آزاد کردن موس و کیبرد باشین :
یه تایمر توی فرم بزارین :

Private Declare Function BlockInput Lib "user32" (ByVal fBlock As Long) As Long

Private Sub Form_Load()
Timer1.Interval = 5000
BlockInput True
End Sub
Private Sub Timer1_Timer()
BlockInput False
End Sub

با این کد عمل قفل شدن 5 ثانیه طول میکشه.
پنج شنبه بیست و ششم 10 1387
این تابع واسه پخش کردن یه فایل با فرمت wav از توی speaker هاست.آرگومان اول آدرس فایل و دومی و سومی باید 1 باشه.یه دکمه توی فرم بزارین و کد زیر رو وارد کنین:

Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long
Private Sub Command1_Click()
PlaySound "D:\File.wav",1,1
End Sub

که باید به جای D:\File.wav آدرس یه فایل با پسوند wav بزارین.

2.GetClassName
این تابع هندل یه پنجره رو میگیره و ClassName ش رو برمیردونه.آرگومان اول هندل پنجره.آرگومان دوم یه متغیر که نام کلاس توش قرار میگیره طول این متغییر باید تعیین شده باشه.سومی هم یه عدد مثل n که وقتی به تابع داده میشه تابع n-1 کاراکتر اول نام کلاس رو داخل متغییر قرار میده.(البته مطمین نستم شایدم n کاراکتر اول رو برگردونه.خودم امتحان کردم n-1 کاراکتر اول رو قرار داد)این عدد رو 255 قرار بدین خیال خودتونو راحت کنین.

Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long

Private Sub Command1_Click()
Dim ipCName as String * 255
GetClassname Me.hWnd,ipCName,255
Msgbox Replace(ipCName,chr(0),"")
End Sub

واسه توضیح در مورد طول متغیر و چرا اینطوریش کردیم به آموزش تابع GetSystemDirectory سر بزنین.

3. GetAsyncKeyState
با این تابع میتونین بفهمین که قبل از فراخوانی تابع آیا یه کلید فشرده شده یه نه.آرگومانی که تابع میگیره کلیدی که مورد نظرمون هست رو مشخص میکنه.برای مثال

Private Const VK_LEFT = &H25

مربوط به کلید چپ هست.کلیه مقدار ها رو میتونین توی API Viewer پیدا کینین.مقدار برگشتی تابع مشخص میکنه که کلید مور د نظر فشرده شده یا نه .یه دکمه توی فرم بزارین:

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Private Const VK_LEFT = &H25

Private Sub Command1_Click()
If GetAsyncKeyState(VK_LEFT) Then
Print "<--"
End if
End Sub

در ضمن اگه شما مقدار &H8000 رو هم توی شرط If بزارین عمل چاپ فقط در صورتی که اجرا میشه که کلید چپ در زمان فشره شدن دکمه فشرده شده باشه نه قبلش.
البته در حالت اول برای یک بار فشردن دکمه چپ فقط یک بار عمل چاپ با فشردن دکمه انجام میشه.امتحان کنین تا منظورمو بفهمین.

4.LoadCursorFromFile
این تابع اشاره گر یه فایل کرسر (.cur) رو به مامیده که ازش میشه توی تابع SetSystemCursor استفاده کرد.مثالش رو توی تابع بعدی ببینین.

Private Declare Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As Long

5. SetSystemCursor
با این تابع میشه کرسر سیستم رو تعیین کرد.این تابع اول یه اشاره گر از کرسر مورد نظر ما میخواد که ما این رو با استفاده از تابع LoadCursorFromFile میگیریم آرگوما دوم رو هم Private Const OCR_NORMAL = 32512 قرار بدین(مقدار های دیگه رو میتونین توی API Viewer ببینین).یه دکمه توی فرم بزارین:

Private Declare Function SetSystemCursor Lib "user32" Alias "SetSystemCursor" (ByVal hcur As Long, ByVal id As Long) As Long
Private Declare Function LoadCursorFromFile Lib "user32" Alias "LoadCursorFromFileA" (ByVal lpFileName As String) As Long
Private Const OCR_NORMAL = 32512

Private Sub Command1_Click()
Dim hc as long
hc = LoadCursorFromFile("D:\c.cur")
SetSystemCursor hc,32512
End Sub

فایلهای با پسوند .cur که با ویژوال بیسیک نصب شدن رو توی شاخه …\COMMON\GRAPHICS\CURSORS پیدا کنین.به امید دیدار.
پنج شنبه بیست و ششم 10 1387
۴. GetTempPath
این تابع هم مسیر پوشه Temp رو به ما میده و یه فرق کوچیک با قبلیه داره . جای آرگومان هاش عوض شده:

Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nSize As Long,ByVal pBuffer As String) As Long
Private Sub Form_Load()
Dim tmpPath as String * 255
GetTempPath 255,tmpPath
Msgbox Replace(tmpPath,chr(0),"")
End Sub

5.SetForegroundWindow این تابع هندل یم پنجره رو میگیره و اونو فعال میکنه:

Private Declare Function SetForegroundWindow Lib "user32" Alias "SetForegroundWindow" (ByVal hwnd As Long) As Long

با استفاده از تابع GetCursorPos مکان موس رو میگیریم و با استفاده از از تابع WindowFromPoint بوسیله مختصات هندل رو میگیریم و به تابع میدیم(یه تایمر توی فرم بزارین):

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Private Declare Function SetForegroundWindow Lib "user32" Alias "SetForegroundWindow" (ByVal hwnd As Long) As Long
Private Type POINTAPI
x As Long
y As Long
End Type
Dim PAPI As POINTAPI,phWnd as long

Private Sub Form_Load()
Timer1.Interval = 100
End Sub

Private Sub Timer1_Timer()
GetCursorPos PAPI
phWnd = WindowFromPoint(PAPI.x, PAPI.y)
SetForeGroundWindow phWnd
End Sub
پنج شنبه بیست و ششم 10 1387
.AnimateWindow
این تابع رو باید در حالتی که یه پنجره هنوز رسم نشده(یا Hide هست و ...) و یا قبل از پنهان شدن هست باید فراخوانی کرد
بعد از فراخوانی تابع پنجره در حالتهای مختلف به صورت انیمیت رسم میشه یا پنهان میشه.مثلا از سمت چپ طولش افزایش پیدا میکنه تا کاملا رسم بشه.این تابع توی API Viewer نیست:

Private Declare Function AnimateWindow Lib "user32" (ByVal hwnd As Long, ByVal dwTime As Long, ByVal dwFlags As Long) As Boolean

ثابت های مورد نیاز:

Const AW_HOR_POSITIVE = &H1
Const AW_HOR_NEGATIVE = &H2
Const AW_VER_POSITIVE = &H4
Const AW_VER_NEGATIVE = &H8
Const AW_CENTER = &H10
Const AW_HIDE = &H10000
Const AW_ACTIVATE = &H20000
Const AW_SLIDE = &H40000
Const AW_BLEND = &H80000

این تابع 3 تا مقدار به صورت byVal میگیره.اول هندل پنجره مورد نظر.دومی زمانی که میخواهیم عمل رسم انجام بشه سومی هم روش رسم هست که باید ثابت ها را به این بدیم.بعضی از مقادیر (آخر) رو میشه از طریق Or با هم استفاده کرد.
موقتی که میخواهیم یک پنجره از حالت رسم شده به حالت پنهان بره باید مقدار AW_HIDE رو هم به پارامتر آخر (با استفاده از Or) اضافه کنید.کارهایی که این ثابت ها میکنن:

AW_HOR_POSITIVE پنجره از چپ به راست رسم یا پاک میشه
AW_HOR_POSITIVE پنجره از راست به چپ رسم یا پاک میشه
AW_VER_POSITIVE پنجره از بالا به پایین رسم یا پاک میشه
AW_VER_NEGATIVE پنجره از پایین به بالا رسم یا پاک میشه
AW_CENTER پنجره از مرکز باز میشه یا بالعکس
AW_ACTIVATE پنجره رو فعال میکنه

بقیه رو هم درست نفهمیدم شما هم امتحان کنین.
یه مثال میزنم.2 تا دکمه داخل فرم درست کنین و کد زیر رو وارد کنین:

Private Declare Function AnimateWindow Lib "user32" (ByVal hwnd As Long, ByVal dwTime As Long, ByVal dwFlags As Long) As Boolean
Const AW_HOR_POSITIVE = &H1
Const AW_HOR_NEGATIVE = &H2
Const AW_VER_POSITIVE = &H4
Const AW_VER_NEGATIVE = &H8
Const AW_CENTER = &H10
Const AW_HIDE = &H10000
Const AW_ACTIVATE = &H20000
Const AW_SLIDE = &H40000
Const AW_BLEND = &H80000
Private Sub Form_Load()
Me.BackColor = vbBlue
AnimateWindow Me.hwnd, 1000, AW_HOR_POSITIVE Or AW_VER_NEGATIVE
Me.Cls
End Sub
Private Sub Command1_Click()
If Command2.Visible = True Then
AnimateWindow Command2.hwnd, 1000, AW_CENTER Or AW_HIDE: Command2.Visible = False
Else
AnimateWindow Command2.hwnd, 1000, AW_CENTER: Command2.Visible = True
End If
End Sub

برای اینکه بعد از رسم تغییر رنگ های(احتمالی) ایجاد شده از بین بره(صفحه پاک بشه) از Me.Cls استفاده کردم.
این رو هم بگم که در زمانی که تابع داره کارشو میکنه برنامه کار دیگه ای نمیتونه بکنه.در ضمن رنگ زمینه رو عوض کردم تا تغییر اندازه دکمه مشخص بشه.دیگه فکر نکنم توضیحی بخواد.

2.GetBkColor : این تابع BackColor یا رنگ زمینه پنجره ای که hDC ش رو بش دادیم برمیگردونه:

Private Declare Function GetBkColor Lib "gdi32" Alias "GetBkColor" (ByVal hdc As Long) As Long

برای مثال Hdc فرم خودمون رو بش میدیم و مقدار بازگشتیشو با BACKcOLOR فرممون مقایسه میکنیم(1 دکمه توی فرم بزارین):

Private Declare Function GetBkColor Lib "gdi32" Alias "GetBkColor" (ByVal hdc As Long) As Long
Private Sub Form_Load()
Me.BackColor=VbBlue
End sub
Private Sub Command1_Click()
Dim BKcolor as Long
BKcolor = GetBkColor(Me.hdc)
If BKcolor = Me.BackColor Then
Msgbox "Good!",vbinformation
Else
Msgbox "Wrong!!",vbCritical
End If
End Sub

توجه کنین که من در Private Sub Form_Load() رنگ زمینه فرم رو از حالت پیشفرض خارج کردم و یه رنگ معمولی بش دادم این به این دلیل بود که فرم در حالت پیشفرض دارای رنگ زمینه VbFaceButton (یه رنگ سیستمی) هست و برای همین هم خصوصیت Me.BackColor بجای اینکه رنگ زمینه واقعی رو برگردونه یه چیز دیگه برمیگردونه.

3. GetSystemDirectory
این تابع برای گرفتن آدرس پوشه سیستم بکار میره مثلا در ویندوز 98 اگه ویندوز در درایو C نصب شده باشه محل اغلبا"
C:\Windows\System هست.
این تابع به این صورته:

Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long

مقدار اول یه متغیر از نوع String هست که باید به تابع بدیم تا مسیر رو توی اون قرار بده.و دومی رو 255 قرار بدین.این مقدار
نشون میده که تابع حداکثر چند کاراکتر اول مسیر رو برگردونه.چون طول این مسیر به ندرت 255 میشه ما این عدد رو بش میدیم.یه نکته رو توجه کنین که این تابع مقدار 255 کاراکتر(که خودمون مشخص کردیم) رو داخل متغییری که بش دادیم قرار میده که کاراکتر های اول رو مسیر پوشه سیستم و بقیه رو با کاراکتر 0 پر میکنه.بنابراین ما باید طور متغیر که در عادی 0 هست رو به 255 تغییر بدیم و گرنه چون تابع میخواد مقدار رو درون تابع جا بده و تابع جا نداره(طولش 0 هستش) اشکال ایجاد میشه و برنامه ما بسته میشه.همن این ها به این علت هستش که تابع طول متغیر ما رو تغییر نمیده(ولی در خود ویبی اگر یه مقداری رو به یه متغیر از نوع String بدیم طول متغییر خودکار اضافه میشه.)
برای اینکه ما طول متغیر رو برای این تابع به مقدار 255 کاراکتر تغییر بدیم 2 کار میتونیم بکنیم.یکی از این روشه:
Dim sysPath as string * 255
توی این روش طول متغیر با استفاده از 255 کاراکتر تغییر میکنه.(با استفاده از کاراکتر 0‌)
یا اینکه یه مقدار با طول 255 به متغییر میدیم:

Dim sysPath as String
sysPath = String(255," ")

حالا تابع رو فراخوانی میکنیم:

Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Private Sub Form_Load()
Dim sysPath as String * 255
GetSystemDirectory sysPath,255
Msgbox Replace(sysPath,chr(0),"")
End Sub

در خط یکی مونده به آخر با استفاده از تابع Replace مقدار کاراکتر 0 اضافی که با تابع داده شده حذف میشه.
3.GetWindowsDirectory
این تابع مسیر پوشه ویندوز رو برمیگردونه و روش کار باش مشابه قبلی هست :

Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Private Sub Form_Load()
Dim winPath as String * 255
GetWindowsDirectory winPath,255
Msgbox Replace(winPath,chr(0),"")
End Sub
پنج شنبه بیست و ششم 10 1387
برای Shut Down کردن سیستم از تابعExitWindowEx استفاده میشه :

Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long

پارامتر اول یکی از مقدار های زیر میتونه باشه :

Const EWX_LOGOFF = 0
Const EWX_SHUTDOWN = 1
Const EWX_REBOOT = 2
Const EWX_FORCE = 4

همش به غیر از آخری واضحه.آخری با هر کدوم از بقیه که ترکیب بشه (با Or ) موجب میشه که ویندوز برنامه ها رو مجبور به بستن کنه.پارامتر دوم رو هم VbNullString قرار بدین
.مثال :

Private Sub Command1_Click()
ExitWindowsEx EWX_SHUTDOWN or EWX_FORCE, VbNULLString
End Sub

توی ویندوز XP این روش کار نمیکنه.برای شات دانون کردن ویندوز باید از فایل ShutDown.Exe که توی دایرکتوری سیستم هست استفاده کرد.این فایل واسه Shut Down کردن چند تا پارامتر میتونه بگیره که یکیش رو حتما باید بش بدین :

-I

یه واسط کاربری نشون میده که توی اون کاربر Options ها رو مشخص میکنه و بعد OK میکنه تا سیستم خاموش بشه و اگه این رو استفاده کردین دیگه نیاز به پارامتر دیکه ای نیست .البته این پارامتر اصلا به کار ما نمیاد.ما میخواهیم به طور اتوماتیک سیستم رو Shut Down کنیم.

-l

سیستم Logoff میشه

-s

سیستم Shutdown میشه.(توی قسمت های قبلی هرجا گفتم Shut Down منظورم Restart , Shutdown , Logoff بود)

-r

سیستم Restart میشه.

-a

اگه سیستم در حال Shut Down شدن باشه ،این کار لغو (abort)میشه.

-t [Seconds]

این برای زمان بکار میره.یعنی اینکه اگه از این پارامتر استفاده کنین باید بعدش یه عدد که معرف ثانیه هستش بنویسین که اگه این کارو بکنین یه پنجره مثل این نشون داده میشه و سیستم بعد از زمانی که شما تعیین کردین Shut Down میشه:

-c "[This is a comment] "

اگه از پارامتر t استفاده کرده باشین با این پارامتر (c) میتونین توی قسمت Message یه پیغام برای کاربر نشون بدین مثل اینی که من گذاشتم (This is a comment) در ضمن طول این پیغام حداکثر باید 127 کاراکتر باشه.


-f

مثل مقدار EWX_FORCE توی تابع ExitWindowsEx عمل میکنه یعنی اگه ازش استفاده کنین ویندوز برنامه ها رو مجبور به بستن میکنه.
حالا ما برای Shut Down کردن باید این فایل رو با پارامتر ها باز کنیم.از تابع Shell استفاده میکنیم :
2 تا دکمه یکی cmdShutDown و یکی دیگه cmdAbort درست کنین :

Private Sub cmdShutDown_Click()
Shell "Shutdown.exe -r –t 30 –f –c " & """" & "This is a comment" & """"
End Sub
Private Sub cmdAbort_Click()
Shell "Shutdown.exe –a"
End Sub

وقتی دکمه cmdShutDown رو بزنین یه پنجره مثل پنجره ای که عکسش رو گذاشتم ظاهر میشه و شمارش معکوس از 30 شروع میشه.اگه به 30 برسه ویندوز رستارت میشه.اگه دکمه cmdAbort رو بزنین پنجره ی Shut Down بسته میشه.
حالا یه کد واسه رستارت در همون لحظه :

Private Sub cmdShutDown_Click()
If MsgBox("Are you sure? ",VbCritical + VbYesNo) = VbYes Then
Shell "ShutDown.exe –r –f –t 0"
End If
End Sub
پنج شنبه بیست و ششم 10 1387
.GetWindowRect

این تابع مختصات چهار سمت(چپ راست بالا پایین) یه پنجره رو توی یه متغیر از نوع rect قرار میده:

Private Declare Function GetWindowRect Lib "user32" Alias "GetWindowRect" (ByVal hwnd As Long, lpRect As RECT) As Long

آرگومان اول هندل پنجره مورد نظره.دومی هم یه متغییر از نوع rect هستش که تابع مقدار مورد نظر رو توی اون قرار میده.یه label و یه timer توی فرم بزارین و :

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Private Type POINTAPI
x As Long
y As Long
End Type

Private Sub Form_Load()
Timer1.Interval = 10
End Sub

Private Sub Timer1_Timer()
Dim PAPI As POINTAPI, R As RECT
GetCursorPos PAPI
GetWindowRect WindowFromPoint(PAPI.x, PAPI.y), R
Label1.Caption = "Top : " & R.Top & " Bottom : " & R.Bottom _
& " Left : " & R.Left & " Right : " & R.Right _
& " Height : " & R.Bottom - R.Top & " Width : " & R.Right - R.Left
End Sub

اول با استفاده از تابع های GetCursorPos و WindowFromPoint هندل پنجره ای که کرسر موس روشه رومیگیریم.بعد با تابع مورد نظر مختصات بالا و پایین و چپ و راست ومقدار طول وعرزش رو بدست میاریم.

4.InternetGetConnectedState

این تابع مشخص میکنه که کامپیوتر چه طوری به اینترنت متصل شده و یا اصلا متصل شده یا نه:

Private Declare Function InternetGetConnectedState Lib "wininet.dll" (ByRef lpdwFlags As Long,ByVal dwReserved As Long) As Long

آرگومان اول یه متغیر از نوع Long هستش که تابع مقداری که مربوط به نوع ارتباط میشه رو توی این قرار میده.دومی رو هم byval 0& بزارین.

وقتی تابع مقدار رو توی متغیر قرار داد باید با if های متعدد نوع ارتباط رو پیدا کنیم.مقدار میتونه یکی (یا چند تا) از اینا باشه:

Private Const INTERNET_CONNECTION_MODEM As Long = &H1 MODEM ارتباط از طریق
Private Const INTERNET_CONNECTION_LAN As Long = &H2 LAN ارتباط از طریقProxy
Private Const INTERNET_CONNECTION_PROXY As Long = &H4 ارتباط دارای پراکسی هستش
Private Const INTERNET_CONNECTION_MODEM_BUSY As Long = &H8 مودم Busy هستش (؟)
Private Const INTERNET_CONNECTION_OFFLINE As Long = &H20 کامپیوتر در حالتOffline هستش
Private Const INTERNET_CONNECTION_CONFIGURED As Long = &H40 کامپیوتر به اینترنت متصل هستش
Private Const INTERNET_RAS_INSTALLED As Long = &H10 روی کامپیوتر نصب شدهRas

اگه مقدار برگشتی تابع 0 باشه کامپیوتر به اینترنت وصل نیست و اگه 1 باشه وصله.

چون ممکنه مقداری که به متغییر داده میشه چند تا از مقدار های بالا باشه (مثلا CONNECTION_CONFIGURED و CONNECTION_MODEM) باید توی If از AND استفاده کنیم و نمیشه از = استفاده کرد:

Private Const INTERNET_CONNECTION_LAN As Long = &H2
Private Const INTERNET_CONNECTION_PROXY As Long = &H4
Private Const INTERNET_CONNECTION_MODEM_BUSY As Long = &H8
Private Const INTERNET_CONNECTION_OFFLINE As Long = &H20
Private Const INTERNET_CONNECTION_CONFIGURED As Long = &H40
Private Const INTERNET_RAS_INSTALLED As Long = &H10

Private Sub Form_Load()
Dim lpF As Long, MBStr As String
If InternetGetConnectedState(lpF, ByVal 0&) = 1 Then
If lpF And INTERNET_CONNECTION_CONFIGURED Then
MBStr = "Connection to the internet = True ..." & vbNewLine
End If
If lpF And INTERNET_CONNECTION_MODEM Then
MBStr = "By MODEM" & vbNewLine
End If
If lpF And INTERNET_CONNECTION_LAN Then
MBStr = "By LAN" & vbNewLine
End If
If lpF And INTERNET_CONNECTION_MODEM_BUSY Then
MBStr = "MODEM Busy" & vbNewLine
End If
If lpF And INTERNET_CONNECTION_OFFLINE Then
MBStr = "Offline" & vbNewLine
End If
If lpF And INTERNET_CONNECTION_PROXY Then
MBStr = "Proxy" & vbNewLine
End If
If lpF And INTERNET_RAS_INSTALLED Then
MBStr = "Ras Installed" & vbNewLine

End I
Else
MBStr = "Connected to the internet = False"
End If
MsgBox MBStr
End Sub
پنج شنبه بیست و ششم 10 1387
معرفی و اموزش چند تابع API

1.Mouse_event

این تابع واسه شبیه سازی کردن فشرده (یا رها) شدن دکمه های موس هستش:

Private Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)

آرگومان اول دکمه ای هستش که میخواهیم شبیه سازیش کنیم و این مقدار هارو میشه بهش داد:

Private Const MOUSEEVENTF_LEFTDOWN = &H2 دکمه سمت چپ فشرده میشه
Private Const MOUSEEVENTF_LEFTUP = &H4 دکمه سمت چپ رها میشه
Private Const MOUSEEVENTF_MIDDLEDOWN = &H20 دکمه وسطی فشرده میشه
Private Const MOUSEEVENTF_MIDDLEUP = &H40 دکمه وسطی رها میشه
Private Const MOUSEEVENTF_RIGHTUP = &H10 دکمه سمت راست فشرده میشه
Private Const MOUSEEVENTF_RIGHTDOWN = &H8 دکمه سمت راست رها میشه

بقیه آرگومان ها رو ۰ قرار بدین

حالا عمل فشرده (یا رها) شدن دکمه های موس در جایی که موس قرار داره شبی سازی میشه:

Private Const MOUSEEVENTF_LEFTDOWN = &H2 ' left button down
Private Const MOUSEEVENTF_LEFTUP = &H4 ' left button up
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Private Sub Command1_Click()
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub

kb_event.۲

این تابع واسه شبیه سازی فشرده شدن یا رها کردن دکمه های کیبرد هستش:

Private Declare Sub keybd_event Lib "user32" Alias "keybd_event" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

آرگومان اول کلید مورد نظر هستش که توی ویبی میشه از vbkeyA , vbkeyB , ... استفاده کرد.یا میشه از ثابت هایی که توی ای پی آی ویور هست VK_A ... , VK_B , ... استفاده کرد.

آرگومان دوم رو 0 بزارین.سومی آگه 0 باشه عمل فشرده شدن و اگه 2 باشه عمل رها شدن کلید بازسازی میشه.چهارمی رو هم 0 قرار بدین:

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Private Sub Form_Click()
keybd_event vbKeyA, 0, 0, 0
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
MsgBox KeyCode
End Sub
پنج شنبه بیست و ششم 10 1387
. Switch یک تعداد آرگومان که تعدادشون باید زوج باشه میگیره به طوری که :
آرگومان های فرد( اولی ، سومی ، پنجمی و ...) باید یک عبارت باشن(یا میشه گفت عبارت در نظر گرفته میشن)
آرگومان های زوج هم باید مقدار باشن(یا میشه گفت مقدار در نظر گرفته میشن)
تابع میاد به ترتیب تک تک آرگومان های فرد رو مورد بررسی قرار میده.به اولین آرگومانی که ارزشش درست (True) باشه که رسید آرگومان بعد از اون(که یک مقدار هست) رو برمیگردونه.

مثلا فرض کنین شما میخواهین یک تابعی درست کنین که یک عدد از 1 تا 5 بگیره و معادل رشته ای اون رو (“One” ، “Two” و ...) رو برگردونه.با استفاده از این تابع شما میتونین اینطوری عمل کنین :
Function nToS(Byval n as Integer) As String
If n > 5 Or n < 1 Then Exit Function
nToS = Switch(n=1,”One”,n=2,”Two”,n=3,”Three”,n=4,”Four”,n=5,”Five”)
End Function

کد این تابع اول چک میکنه که عددی که بهش داده شده بین 1 تا 5 هست یا نه.اگه نبود از تابع خارج میشه.
اما اگه بود با استفاده از تابع Swich مقدار ها ی مختلفی که n میتونه داشته باشه رو چک میکنه و مقدار معادل رشته ای رو برمیگردونه.مثلا nToS(4)=”Four” .

162. SYD

163. Tan این هم تانژانت یک زاویه (بر حسب رادیان) رو برمیگردونه.

164. TextHeight یک رشته میگیره و ارتفاعی رو که اون رشته اشغال میکنه رو باتوجه به فونت فرم و واحد فرم(ScaleMode) برمیگردونه.مثلا اگه واحد و فونت فرم پیشفرض باشه :
TextHeight(“m”) = TextHeight(“MA”) = 195

یعنی اینکه ارتفاعی که اشغال میکنه به طول رشته و یا کوچک و بزرگ بودن کاراکتر ها بستگی نداره(که این هم بدیهیه!)

165. TextWidth کار تابع قبلی رو برای عرض یک رشته انجام میده.با این فرق که همونطور که میدونیم با تغییر تعداد کاراکتر یک رشته و یا کوچک و بزرگ بودن کاراکتر ها عرضی که رشته اشغال میکنه فرق میکنه.مثلا
TextWidth(“a”) = 90 ، TextWidth(“A”) = 166 و TextWidth(“Abcd”) = 375

167. TimeSerial ساعت و دقیقه و ثانیه رو میگیره و زمان رو با نوع Dateبرمیگردونه مثلا
Debug.Print TimeSerial(10, 20, 30) ‘ prints 10:20:30 AM

168. TimeValueمثل قبلیه با این فرق که یه تا مقدار رو یکجا و از نوع رشته میگیره .مثلا :
Debug.Print TimeValue(“10:20:30”) ‘ prints 10:20:30 AM

169. Trim (و Trim$) یک رشته میگیره و فاصله های اول و آخرش رو حذف میکنه(کار LTrim و RTrim رو با هم میکنه) مثلا :
Debug.Print Trim(“ Visual Basic “) ‘prints “Visual Basic”

170. TypeName یک مقدار میگیره و نوعش رو برمیگردونه.اون مقدار میتونه از هر نوعی باشه.مثلا :

Debug.Print TypeName(Me) ‘ prints Form1
Debug.Print TypeName(Command1) ‘ prints CommandButton
Debug.Print TypeName(“Hello”) ‘ prints String
Debug.Print TypeName(2.2) ‘ prints Double
Debug.Print TypeName(Err) ‘ prints ErrObject

171. UCase (و UCase$) یک رشته میگیره و همه ی حروف کوچک اون رو به حروف بزرگ تبدیل میکنه مثلا ”!UCase(“Hello!”) = “HELLO.این تابع برعکس LCase کار میکنه.

172. Unload یک آبجک رو از حافظه پاک میکنه.مثلا Unload Form1

173. Val یک رشته میگیره و عدد های سمت چپش رو جدا میکنه و وقتی به یک کاراکتر غیر عددی یا غیر نقطه برسه کارش رو ادامه میده .عددی که برمیگردونه از نوع Double هستش.مثلا
Val(“2 4 7 11 323.23 adas”) = 24711323.23

174. در مورد کار تابع های ValidateControls و WhatsThisMode هم چیزی نفهمیدم :

MSDN :
ValidateControls: Ensures that the contents of the last control on the form are valid before exiting the form.
WhatsThisMode: Duplicates the functionality of the WhatsThisMode method of a Visual Basic 6.0 form.

175. VarType هم یک مقدار میگیره و نوع اون رو از نوع vbVarType برمیگردونه و فرقش هم با TypeName همینه.مثلا
VarType(2.2) = vbDouble

176. Year یه تاریخ میگیره و سال اون رو استخراج میکنه.مثلا
Year(Now()) = 2005

177. ‌ZOrder مختصات Z یک کنترل(به طور پیشفرض فرمی که توش فراخوانی میشه) رو تعیین میکنه.مختصات Z تیعیین میکنه که کدوم کنترل ها باید زیر بقیه و کدوم باید روی دیگری باشه.مقدار 0 (مقدار پیشفرض) یه کنترل رو به رو میاره و مقدار 1 به زیر میبره
پنج شنبه بیست و ششم 10 1387
X